﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class 坦克血量 : MonoBehaviour
{
    public int 爆炸受到的伤害 = 20; // 基础伤害
    public int 爆炸伤害随机范围 = 10; // 随机伤害
    public int 爆炸距离系数 = 30; // 距离最近时的伤害，最远为0
    public float 爆炸受伤最远距离 = 3; // 与碰撞框保持一致
    public int 血量 = 100;
    public GameObject 坦克爆炸效果;
    public AudioClip 坦克爆炸音效;

    public bool 已经挂了;

    public Slider 血条;

    private int 总血量;

    public 颜色渐渐透明 坦克掉血提示;

    private object 上一个炮弹;

    void Start()
    {
        已经挂了 = false;
        总血量 = 血量;
        血条.value = ((float)血量) / ((float)总血量);
    }

    public void 受到打击(object[] args)
    {
        
        if (血量 <= 0)
        {
            return;
        }

        if (args == null || args.Length < 2)
        {
            Debug.LogWarning("受到未知打击，不扣血！");
            return;
        }

        if (上一个炮弹!=null)
        {
            if (上一个炮弹 == (args[1]))
            {
                Debug.Log("同一个炮弹！");
                return;
            }

            Debug.Log("上一个炮弹："+ 上一个炮弹);
        }

        上一个炮弹 = args[1];
        Debug.Log("args[1]：" + args[1]);


        int 最小伤害值;
        int 最大伤害值;
        if (args[0] is Transform 爆炸点)
        {
            float 爆炸距离 = Vector3.Distance(爆炸点.position, transform.position);
            int 距离伤害 = (int)((爆炸受伤最远距离-爆炸距离) / 爆炸受伤最远距离 * 爆炸距离系数);
            最小伤害值 = 爆炸受到的伤害 + 距离伤害;
            最大伤害值 = 爆炸受到的伤害 + 距离伤害 + 爆炸伤害随机范围;
            Debug.Log("受到伤害：（爆炸距离："+ 爆炸距离+ "，最小伤害值："+ 最小伤害值+ "，最大伤害值："+ 最大伤害值+"）");
        }
        else
        {
            Debug.LogWarning("参数不正确，受到未知打击，不扣血！");
            return;
        }

        if (最小伤害值 >= 最大伤害值)
        {
            最小伤害值 = 最大伤害值 - 1;
        }

        int 实际伤害 = Random.Range(最小伤害值, 最大伤害值);
        Debug.Log("实际伤害：" + 实际伤害);

        血量 -= 实际伤害;

        // 掉血提示
        if(坦克掉血提示) 
            if(坦克掉血提示.文本) 
                坦克掉血提示.文本.text = "- " + 实际伤害;
        if (实际伤害>(最小伤害值/2+ 最大伤害值 / 2))
        {
            坦克掉血提示.显示(Color.red);
        }
        else
        {
            坦克掉血提示.显示(Color.yellow);
        }


        // 修改血条
        血条.value = ((float)血量) / ((float)总血量);


        if (血量 <= 0)
        {
            AudioSource.PlayClipAtPoint(坦克爆炸音效, transform.position);
            Instantiate(坦克爆炸效果, transform.position + Vector3.up, transform.rotation);
            
            gameObject.SetActive(false);
            Destroy(gameObject);
        }
    }
}
